node js 文件和文件夹处理

一、相关模块 
    fs模块
    fs模块包含所有文件查询和处理的相关函数，用这些函数，可以查询文件信息，读写和关闭文件
    查询文件信息 fs.stath函数来查询文件或目录的元信息（文件的大小，创建日期或者权限等文件信息）
        var fs = require('fs');
        fs.stat('/etc/passwd', function(err, stats) {
            if (err) { throw err;}
            console.log(stats);
        });
    1.fs.stat()调用会将一个stats类的实例作为参数传递给它的回调函数，可以像下面这样使用stats实例：
    2.stats.isFile() —— 如果是个标准文件，而不是目录，socket，符号链接或者设备，则返回true，否则false
    3.stats.isDiretory() —— 如果是目录则返回tue，否则false
    4.stats.isBlockDevice() —— 如果是块设备则返回true，在大多数UNIX系统中块设备通常都在/dev目录下
    5.stats.isChracterDevice() —— 如果是字符设备返回true
    6.stats.isSymbolickLink() —— 如果是文件链接返回true
    7.stats.isFifo() —— 如果是个FIFO(UNIX命名管道的一个特殊类型)返回true
    8.stats.isSocket() —— 如果是个UNIX socket（TODO：googe it）
    打开文件 fs.open函数打开文件
        var fs = require('fs');
        fs.open('/path/to/file', 'r', function(err, fd) {
            // got fd file descriptor
        });
    path的模块，可以帮你标准化，连接，解析路径
    ，从绝对路径转换到相对路径，从路径中提取各部分信息，检测文件是否存在。总的来说，path模块其实只是些字符串处理，而且也不会到文件系统去做验证（path.exists函数例外）。

    路径的标准化 normalize 函数
    标准化一个路径，而且它还能处理“..”，“.”“//”
        var path = require('path');
        path.normalize('/foo/bar//baz/asdf/quux/..');
        // => '/foo/bar/baz/asdf'
    连接路径 path.join()函数
        var path = require('path');
        path.join('/foo', 'bar', 'baz/asdf', 'quux', '..');
        // => '/foo/bar/baz/asdf'
    解析路径 path.resolve()可以把多个路径解析为一个绝对路径
    从路径提取数据 path.dirname(filePath)获得文件路径的目录部分
        var path = require('path');
        path.dirname('/foo/bar/baz/asdf/quux.txt');
        // => /foo/bar/baz/asdf
        从文件路径里得到文件名使用 path.basename函数
        var path = require('path');
        path.basename('/foo/bar/baz/asdf/quux.html')
        // => quux.html
        去掉扩展名
        var path = require('path');
        path.basename('/foo/bar/baz/asdf/quux.html', '.html');
        // => quux
        path.extname() 获取扩展名
        var path = require('path');
        path.extname('/a/b/index.html');
        // => '.html'
        path.extname('/a/b.c/index');
        // => ''
        path.extname('/a/b.c/.');
        // => ''
        path.extname('/a/b.c/d.');
        // => '.'
    检查路径是否存在 path.exsits()：
        var path = require('path');
        path.exists('/etc/passwd', function(exists) {
             console.log('exists:', exists);
             // => true
        });
        path.exists('/does_not_exist', function(exists) {
             console.log('exists:', exists);
             // => false
        });
        Node0.8版本开始，exists从path模块移到了fs模块，变成了fs.exists，除了命名空间不同，其它都没变：
        var fs = require('fs');
        fs.exists('/does_not_exist', function(exists) {
            console.log('exists:', exists);
            // => false
        });
        同步版本path.existsSync()，功能完全一样，只是它不会调用回调函数，而是直接返回结果：
        var path = require('path');
        path.existsSync('/etc/passwd');
        // => true

一、操作文件方法（同步和异步）：
1、 fs.stat && fs.statSync 提供了访问文件的属性信息
2、 fs.readdir && fs.readdirSync 提供读取文件目录信息
3、 fs.unlink && unlinkSync  进行删除文件操作，不可以删除文件夹
4、 fs.rmdir && fs.rmdirSync 进行删除文件夹操作，但文件夹必须为空文件夹